Skip to main content

业务内置API

提供具体业务对象的内置前端能力,供客开代码能够使用到标准产品的能力快速、高效的实现部分复杂业务逻辑,并且能够保持与标准功能的逻辑互洽。目前提供的能力都是通过Execute Command的方式进行调用。

公共

1. 设置日期字段的最大日期 Commands:Commands.Common_SetMaxDate

  • 调用入参说明
参数类型说明
pathString字段名称, 子表则为: stages.planStartDate
valueDate日期值
  • 使用示例
thisApp.formOnLoad = async (ctx) => {
// 设置日期字段的最大日期
ctx.executeCommand(Commands.Common_SetMaxDate, {
path: "planStartDate",
value: new Date(),
});
};

2. 设置日期字段的最小日期 Commands:Commands.Common_SetMinDate

  • 调用入参说明
参数类型说明
pathString字段名称, 子表则为: stages.planStartDate
valueDate日期值
  • 使用示例
thisApp.formOnLoad = async (ctx) => {
// 设置日期字段的最小日期
ctx.executeCommand(Commands.Common_SetMinDate, {
path: "planStartDate",
value: new Date(),
});
};

3. 设置日期组件的minuteStep Commands: Commands.Common_SetMinuteStep

  • 调用入参说明
参数类型说明
pathString字段名称, 子表则为: stages.planStartDate
valueNumber分钟间隔
  • 使用示例
thisApp.formOnLoad = async (ctx) => {
// 设置日期组件的minuteStep
ctx.executeCommand(Commands.Common_SetMinuteStep, {
path: "csRiQi",
value: 30,
});
};

4. 根据来源单据生成当前单据数据 Commands:Commands.Common_SelectSourceData

  • 调用入参说明

  • 参数类型说明
    objectTypeString来源单据
    billTypeIdString来源单据类型id
    businessTypeIdString来源业务类型id
    idsString来源的单据id集合
  • 使用示例

thisApp.formOnLoad = async (ctx) => {
ctx.executeCommand(Commands.Common_SelectSourceData, {
objectType: "ArContract",
billTypeId: "xxxx1",
businessTypeId: "xxxx1",
ids: ["xxxx1"]
})
};

附件

1. 控制附件的上传,编辑,删除按钮是否显示 Commands:Commands.Attachment_SetActionDisabled

  • 调用入参说明
参数类型说明
actionString操作类型,可选值为:uploadeditdelete
disabledBoolean是否禁用操作,true为禁用,false为启用
  • 使用示例
thisApp.formOnLoad = async (ctx) => {
// 禁用附件的上传功能
ctx.executeCommand(Commands.Attachment_SetActionDisabled, {
action: "upload",
value: false
})
};

项目管理

项目计划

1. 新增 "子级任务" Commands: Commands.ProjectSchedule_AddSubTask

  • 概要业务逻辑
    根据当前行的任务判断是否能新增下级任务(里程碑任务和已完成的末级任务无法新增下级),若不符合校验逻辑将直接通过弹窗提示错误信息;通过前置性校验后将根据当前任务编号和属性增加下级任务,同时清空与父级任务的约束关系。
    业务适用范围:项目任务明细表。
  • 调用入参说明
参数类型说明
rowIndexNumber基准任务所在的行序号,将对当前基准任务新增下级任务
  • 返回值
    Boolean: 代表新增子任务的成功状态。

  • 使用示例

thisApp.fieldOnChanged = async (ctx) => {
const form = ctx.getFormContext().form;
const currentCtx = ctx.getCurrentContext();
const { subGridName, subGridLine, currentField,fieldName } = currentCtx
// 任务子表的部门值发生变化,且部门编码是1001时执行新增 “子集任务”
if (fieldName === "department" && subGridName === "tasks") {
const value = currentField.value
if (value.code === "1001") {
const result = ctx.executeCommand(Commands.ProjectSchedule_AddSubTask, { rowIndex: subGridLine })
if (result === true) {
return qiqi.ui.message.showSuccess("新增下级成功")
}
return qiqi.ui.message.showError("新增下级任务失败")
}
}
};

2. 生成制约关系 Commands: Commands.ProjectSchedule_CreateDependent

  • 概要业务逻辑
    在编辑状态下,将所有未开始的任务的前置任务进行清除;并重新生成任务的制约关系。
  • 调用入参说明
参数类型说明
isSilentBoolean是否静默执行(静默模式下不进行用户交互弹窗)
  • 返回值
    Promise<void> 无返回值

  • 使用示例

thisApp.fieldOnChanged = async (ctx) => {
const form = ctx.getFormContext().form;
const currentCtx = ctx.getCurrentContext();
if (currentCtx.currentField.name === "businessDate") {
onBusinessDateChanged(ctx)
return
}
};

/**
* 业务日期变化后,创建制约关系或者取消关系;
* 随机静默处理。
*/
function onBusinessDateChanged(ctx) {
const value = ctx.getCurrentContext().currentField.value
if (typeof value !== "object" || !(value instanceof Date)) {
return
}
// 随机进行控制是否静默处理。
const isSilent = parseInt(Math.random() * 10) % 2 === 0;

// 如果日期是在周末,则取消制约关系;否则生成制约关系。
const workDay = value.getDay()
if (!workDay || workDay === 6) {
Commands
ctx.executeCommand("ProjectSchedule_ClearAllDependent", { isSilent})
} else {
ctx.executeCommand("ProjectSchedule_CreateDependent", { isSilent})
}
return
}

3. 取消制约关系 Commands: Commands.ProjectSchedule_ClearAllDependent

  • 概要业务逻辑
    在编辑状态下,将所有未开始的任务的前置任务进行清除;并取消任务的制约关系。
  • 调用入参说明
参数类型说明
isSilentBoolean是否静默执行(静默模式下不进行用户交互弹窗)
  • 返回值
    Promise<void> 无返回值

  • 使用示例

    参考 生成编制关系 的使用案例。

4. 自动编排 Commands: Commands.ProjectSchedule_AutoSchedule

  • 概要业务逻辑
    在编辑状态下,开启自动编排后,任务会自动根据制约关系进行处理开始时间。 此命令是toggle模式,即关闭模式下调用是打开,打开模式下调用是关闭。
  • 调用入参说明
参数类型说明
isSilentBoolean是否静默执行(静默模式下不进行用户交互弹窗)
  • 返回值
    Promise<boolean>: 命令调用过后的自动编排的设置状态。

  • 使用示例

thisApp.formOnInit = async (ctx) => {
ctx.getPageContext().getActionBar().addButton({
key: 'autoSchedule',
text: '自动编排',
onClick: async () => {
const result = await ctx.executeCommand("ProjectSchedule_AutoSchedule")
qiqi.ui.message.show("自动编排的启用状态:" + result)
},
})
};

销售管理

取价

1. 运行控制某行是否参与取价 Commands: Commands.FetchPrice_CanRowFetchPrice

  • 概要业务逻辑
    某些情况下,不需要触发系统默认的取价,可以通过函数过滤某些不需要取价的行
  • 调用入参说明
参数类型说明
Fn(rowData:any) => Boolean定义过滤函数,判断本条数据是否参与取价,返回 true 或者 false。注:由于内部设计的问题,如果是整单取价,这里的行数据是扁平化的,比如存货字段的值就是 rowData.productId,而不是rowData.product.id,所以还请使用两种方式判断
  • 使用示例
thisApp.formOnLoad = async (ctx) => {
ctx.executeCommand('FetchPrice_CanRowFetchPrice', (rowData) => {
// 这里还是可以拿到上下文(比如表单)的值进行判断
const form = ctx.getFormContext().form

const billTypeId = form.value.billType.id
if (billTypeId == 'billType1') {
// 这种单据类型的不触发取价
return false
}
// 对象类型的数据需要判断两种模式
if (rowData.productId == 'productId1' || (rowData.product && rowData.product.id == 'productId1')) {
// 这种存货不需要触发取价
return false
}
// 触发取价
return true
})
};

采购订单

批量取价

1. 批量取价 Commands: Commands.FetchPrice_BatchFetchPrice

  • 概要业务逻辑
    执行明细批量取价功能
  • 调用入参说明
参数类型说明
showMessageboolean批量取价,showMessage为布尔型参数,控制是否展示错误、提示信息
  • 使用示例
// 保存前触发取价
thisApp.onBeforeSave = async (ctx) => {
const form = ctx.getFormContext().form;
await ctx.executeCommand('FetchPrice_BatchFetchPrice', true)
};

2. 获取可用量 Commands: Commands.FetchAvailQty

  • 概要业务逻辑
    执行明细获取可用量功能
  • 调用入参说明
参数类型说明
  • 使用示例
// 保存前触发获取可用量
thisApp.onBeforeSave = async (ctx) => {
const form = ctx.getFormContext().form;
await ctx.executeCommand('FetchAvailQty')
};

3. 获取历史价 Commands: Commands.FetchHistoryPrice

  • 概要业务逻辑
    执行明细获取历史价功能
  • 调用入参说明
参数类型说明
  • 使用示例
// 保存前触发获取可用量
thisApp.onBeforeSave = async (ctx) => {
const form = ctx.getFormContext().form;
await ctx.executeCommand('FetchHistoryPrice')
};